﻿#region Copyright

//--------------------------------------------------------------------------------------------------------
// <copyright file="TopicHistoryBO.cs" company="DNN Corp®">
//      DNN Corp® - http://www.dnnsoftware.com Copyright (c) 2002-2013 by DNN Corp®
//
//      Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
//      associated documentation files (the "Software"), to deal in the Software without restriction,
//      including without limitation the rights to use, copy, modify, merge, publish, distribute,
//      sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
//      furnished to do so, subject to the following conditions:
//
//      The above copyright notice and this permission notice shall be included in all copies or
//      substantial portions of the Software.
//
//      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
//      NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
//      NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
//      DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//      OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
////------------------------------------------------------------------------------------------------------

#endregion Copyright

using DotNetNuke.Wiki.BusinessObjects.Models;
using DotNetNuke.Wiki.Utilities;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;

namespace DotNetNuke.Wiki.BusinessObjects
{
    /// <summary>
    /// The Topic History Business Object
    /// </summary>
    public class TopicHistoryBO : _AbstractBusinessObject<TopicHistory, int>
    {
        #region Variables

        private UnitOfWork mUnitOfWork;

        #endregion Variables

        #region Constructor

        /// <summary>
        /// Initializes a new instance of the <see cref="TopicHistoryBO"/> class.
        /// </summary>
        /// <param name="uOw">The Unit of Work.</param>
        public TopicHistoryBO(UnitOfWork uOw)
            : base(uOw.Context)
        {
            this.mUnitOfWork = uOw;
        }

        #endregion Constructor

        #region Enums

        /// <summary>
        /// The possible controlled errors generated by this class
        /// </summary>
        public enum TopicHistoryError
        {
            /// <summary>
            /// The error1
            /// </summary>
            Error1 = 1,

            /// <summary>
            /// The error2
            /// </summary>
            Error2 = 2,

            /// <summary>
            /// The error3
            /// </summary>
            Error3 = 3
        }

        #endregion Enums

        #region Methods

        /// <summary>
        /// Gets a topic history, based on the topic history id
        /// </summary>
        /// <param name="topicHistoryId">the id of the topic history to collect</param>
        /// <returns>returns a topic history object</returns>
        internal TopicHistory GetItem(int topicHistoryId)
        {
            return this.DatabaseContext.ExecuteQuery<TopicHistory>(CommandType.StoredProcedure, string.Concat(this.DataBaseOwner, this.ObjectQualifier, "Wiki_TopicHistoryGet"), topicHistoryId).FirstOrDefault();
        }

        /// <summary>
        /// Repositories the delete.
        /// </summary>
        /// <param name="entity">The entity.</param>
        internal override void RepositoryDelete(ref TopicHistory entity)
        {
            this.DatabaseContext.Execute(CommandType.StoredProcedure, string.Concat(this.DataBaseOwner, this.ObjectQualifier, "Wiki_TopicHistoryDelete"), entity.TopicId);
        }

        /// <summary>
        /// Entity_s the evaluate SQL exception.
        /// </summary>
        /// <param name="exc">The exception.</param>
        /// <param name="crudOperation">The crud operation.</param>
        /// <exception cref="System.NotImplementedException">SQL Exception</exception>
        internal override void Entity_EvaluateSqlException(
            SqlException exc,
            SharedEnum.CrudOperation crudOperation)
        {
            throw new System.NotImplementedException();
        }

        /// <summary>
        /// Gets the previous versions of the topic passed has parameter
        /// </summary>
        /// <param name="topicID">the topic to evaluate</param>
        /// <returns>returns collection of topics</returns>
        internal IEnumerable<TopicHistory> GetHistoryForTopic(int topicID)
        {
            return this.DatabaseContext.ExecuteQuery<TopicHistory>(CommandType.StoredProcedure, string.Concat(this.DataBaseOwner, this.ObjectQualifier, "Wiki_TopicHistoryGetHistoryForTopic"), topicID);
        }

        #endregion Methods
    }
}